package com.gitee.zycra.future.job.manager;

import com.gitee.zycra.future.job.common.model.JobNode;
import com.gitee.zycra.future.job.common.util.IdGenerator;
import com.gitee.zycra.future.job.dao.JobNodeDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author zycra
 */
@Component
public class JobNodeManager {

    @Autowired
    private JobNodeDao jobNodeDao;

    @Autowired
    private IdGenerator idGenerator;

    /**
     * 插入
     *
     * @param jobNode 节点对象
     * @return 插入条数
     */
    public int insertJobNode(JobNode jobNode) {
        jobNode.setId(idGenerator.nextId());
        return jobNodeDao.insertJobNode(jobNode);
    }

    /**
     * 更新节点信息
     *
     * @param jobNode 节点对象
     * @return 更新条数
     */
    public int updateJobNode(JobNode jobNode) {
        return jobNodeDao.updateJobNode(jobNode);
    }

    /**
     * 将上次心跳时间超过1分钟的置为失效
     *
     * @return 影响行数
     */
    public int checkAliveAndUpdate() {
        return jobNodeDao.checkAliveAndUpdate();
    }

    /**
     * 查询节点信息
     *
     * @param applicationName 应用名称
     * @param nodeIp          节点IP
     * @return 查询结果
     */
    public List<JobNode> selectByApplicationAndIp(String applicationName, String nodeIp) {
        return jobNodeDao.selectByApplicationAndIp(applicationName, nodeIp);
    }

    /**
     * 根据节点ID查询
     *
     * @param nodeId 节点ID
     * @return 节点信息
     */
    public JobNode selectById(Long nodeId) {
        return jobNodeDao.selectById(nodeId);
    }

    /**
     * 根据应用查询适合分配的节点
     *
     * @param applicationName 应用名称
     * @param excludeIp       要排除的节点
     * @return 适合分配的节点
     */
    public String selectToDispatchNode(String applicationName, String excludeIp) {
        return jobNodeDao.selectToDispatchNode(applicationName, excludeIp);
    }
}
